package manager;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SrvUsuarios
 */
@WebServlet("/SrvUsuarios")
public class SrvUsuarios extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SrvUsuarios() {
        super();
        // TODO Auto-generated constructor stub
    }

    
    protected void ProcesarPeticion(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
    	response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();

		String operacion = (String) request.getParameter("operacion");
		db conexion = null;

		/* Inicio operacion Agregar Usuario */

		if (operacion.equals("add")) { // agregar departamento
			String usuario = (String) request.getParameter("usuario");
			String nombre = (String) request.getParameter("nombre");
			String perfil = (String) request.getParameter("perfil");
			String clave = (String) request.getParameter("clave");
			String estado = (String) request.getParameter("estado");
			
			try {
				conexion = new db();
				Usuarios user = new Usuarios(conexion);
				user.setUsuario(usuario);
				user.setNombre(nombre);
				user.setPerfil(perfil);
				user.setClave(clave);
				user.setEstado(estado);
				
				if (!user.exist()) {
					if (user.add()) {
						out.print("OK");
					} else {
						out.print(user.getError());
					}
				} else {
					out.print("Usuario ya existe: " + user.getNombre());
				}

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print("Error de conexion con el servidor: "
						+ e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}

		}

		/* Fin operacion Agregar Usuario */

		if (operacion.equals("modify")) { // Update departamento
			String usuario = (String) request.getParameter("usuario");
			String key = (String) request.getParameter("key");
			String nombre = (String) request.getParameter("nombre");
			String perfil = (String) request.getParameter("perfil");
			String clave = (String) request.getParameter("clave");
			String estado = (String) request.getParameter("estado");
			
			try {
				conexion = new db();
				Usuarios user = new Usuarios(conexion);
				user.setKey(key);
				
				if (user.exist()) {
					user.setUsuario(usuario);
					user.setNombre(nombre);
					user.setPerfil(perfil);
					user.setClave(clave);
					user.setEstado(estado);
					if (user.update()) {
						out.print("OK");
					} else {
						out.print(user.getError());
					}
				} else {
					out.print("Usuario no existe: " + usuario);
				}

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print("Error de conexion con el servidor: "
						+ e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}

		}

		
		/* Inicio operacion listar departamentos */
		if (operacion.equals("list")) {
			try {
				conexion = new db();
					String sql = "select * from usuarios ";
					sql += " order by usuario";
					ResultSet rs = conexion.Query(sql);
					out.println("<h2>Listado Usuarios</h2>");
					out.println("<table>");
					out.println("<tr>");
					out.println("<th>Usuario</th>");
					out.println("<th>Nombre</th>");
					out.println("<th>Perfil</th>");
					out.println("<th>Activo?</th>");
					out.println("<th></th>");
					out.println("</tr>");
					if (rs.next()) { // existen departamentos
					do {
						out.println("<tr>");
						out.println("<td>" + rs.getString("usuario") + "</td>");
						out.println("<td>" + rs.getString("nombre") + "</td>");
						out.println("<td>" + rs.getString("perfil") + "</td>");
						out.println("<td>" + (rs.getString("estado").equals("1")?"Si":"No") + "</td>");
						out.println("<td>");
						out.print("<a href=\"mod_usuario.jsp?codigo="
								+ rs.getString("usuario")
								+ "\">Modificar</a>");
						out.println("</td>");
						out.println("</tr>");

					} while (rs.next());
					}else {
						out.println("<tr>");
						out.println("<td colspan=5>No se encontraron registros</td>");
						out.println("</tr>");
					}
					out.println("</table>");
				

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
			/* Fin operacion listar departamentos */

		}
		
		
		if (operacion.equals("changepassword")) {
			String user = (String)request.getParameter("usuario");
			String clave = (String)request.getParameter("clave");
			try {
				conexion = new db();
				Usuarios usuario = new Usuarios(conexion);
				if (usuario.changepassword(user, clave)) {
					out.print("OK");
				}else {
					out.print(usuario.getError());
				}
				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
		}
		
		if (operacion.equals("addproject")) {
			String user = (String)request.getParameter("usuario");
			String project = (String)request.getParameter("proyecto");
			try {
				conexion = new db();
				Usuarios usuario = new Usuarios(conexion);
				if (usuario.addProject(user, project)) {
					out.print("OK");
				}else {
					out.print(usuario.getError());
				}
				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
		}
		
		if (operacion.equals("removeproject")) {
			String user = (String)request.getParameter("usuario");
			String project = (String)request.getParameter("proyecto");
			try {
				conexion = new db();
				Usuarios usuario = new Usuarios(conexion);
				if (usuario.removeProject(user, project)) {
					out.print("OK");
				}else {
					out.print(usuario.getError());
				}
				
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
		}
		
		
		/* Inicio operacion listar departamentos */
		if (operacion.equals("listproject")) {
			String usuario = (String)request.getParameter("usuario");
			try {
				conexion = new db();
				
				
				ResultSet rs = null;
								
				
					
					String sql = "select usuario,proyecto,proydesc from usuario_proyecto,proyectos where proyecto = proycodi and usuario='" + usuario + "'";
					sql += " order by proydesc";
					rs = conexion.Query(sql);
					
					out.println("<h2>Proyectos asignados al usuario " + usuario + "</h2>");

					out.println("<table>");
					out.println("<tr>");
					out.println("<th>Id Proyecto</th>");
					out.println("<th>Nombre</th>");
					out.println("<th></th>");
					out.println("</tr>");
					if (rs.next()) { // existen departamentos
					int fila = 1;
					do {
						out.println("<tr id=\"f"+ fila + "\">");
						out.println("<td>" + rs.getString("proyecto") + "</td>");
						out.println("<td>" + rs.getString("proydesc") + "</td>");
						out.println("<td>");
						out.print("<a href=\"javascript:eliminar('"
								+ rs.getString("usuario")
								+ "','"+ rs.getString("proyecto") + "','f" + fila + "')\" class=\"small button blue\">Eliminar</a>");
						out.println("</td>");
						out.println("</tr>");
						fila++;
					} while (rs.next());
					}else {
						out.println("<tr>");
						out.println("<td colspan=5>No se encontraron registros</td>");
						out.println("</tr>");
					}
					out.println("</table>");
				

			} catch (SQLException e) {
				// TODO Auto-generated catch block
				out.print(e.getMessage());
			} finally {
				if (conexion != null) {
					try {
						conexion.Close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						out.print(e.getMessage());
					}
				}
			}
			/* Fin operacion listar departamentos */

		}
		
		
		out.close();
	}
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		this.ProcesarPeticion(request, response);
	}

}
